package org.convallaria.infrastruct.db.enums;

import com.baomidou.mybatisplus.annotation.IEnum;

/**
 * 基础枚举接口
 * 所有数据库相关枚举都应该实现此接口
 * 
 * @param <T> 枚举值类型
 * @author gjh
 * @since 2024-09-22
 */
public interface BaseEnum<T extends java.io.Serializable> extends IEnum<T> {

    /**
     * 获取枚举值
     * 
     * @return 枚举值
     */
    @Override
    T getValue();

    /**
     * 获取枚举描述
     * 
     * @return 枚举描述
     */
    String getLabel();

    /**
     * 根据值获取枚举
     * 
     * @param value 枚举值
     * @param enumClass 枚举类型
     * @param <E> 枚举类型
     * @param <V> 值类型
     * @return 枚举实例
     */
    static <E extends BaseEnum<V>, V extends java.io.Serializable> E getByValue(V value, Class<E> enumClass) {
        if (value == null || enumClass == null) {
            return null;
        }
        
        for (E enumConstant : enumClass.getEnumConstants()) {
            if (value.equals(enumConstant.getValue())) {
                return enumConstant;
            }
        }
        return null;
    }
}
